/*
 * LineaEntradaPajarosVertical.cpp
 *
 *  Created on: 31/10/2012
 *      Author: ignatius
 */
#include <cmath>
#include <time.h>
#include <cstdlib>
#include <unistd.h>
#include "PajaroRojo.h"
#include "PajaroVerde.h"
#include "PajaroAzul.h"
#include "PajaroVerde.h"
#include "PajaroAzul.h"
#include "LineaEntradaPajarosVerticalDerecha.h"
#define POSICION_X 850.0


LineaEntradaPajarosVerticalDerecha::LineaEntradaPajarosVerticalDerecha(
		double yMinimo, double yMaximo): yMinimo(yMinimo),
		yMaximo(yMaximo) {
}

Pajaro* LineaEntradaPajarosVerticalDerecha::generarPajaro(double ticks) {
	Pajaro* pajaro = NULL;
	unsigned int valorEntero;
	unsigned int divisorEntero = 100000;
	//unsigned int resto;
	unsigned int valorNumerico;
	double seed = (double)time(NULL) * ticks;
	double valorDecimal;
	double divisorDecimal = 100000.0;
	srand(seed);
	valorEntero = rand() % divisorEntero;
	valorDecimal = valorEntero / divisorDecimal;
	valorNumerico = floor(valorDecimal * 9);
	double anguloAleatorio = generarAnguloAleatorio(ticks);
	//double anguloInicial = anguloInicialPajaro(ticks , anguloAleatorio);
	double anguloInicial =  3 * M_PI_2 - anguloAleatorio;
	double normaVelocidadInicial = velocidadInicialPajaro(ticks);
	int yInicial = (double)(rand() % ((int )(yMaximo - yMinimo + 1))) + 
	yMinimo;
	if (valorNumerico < 3) {
	 	pajaro = new PajaroAzul(anguloInicial, normaVelocidadInicial, POSICION_X,
	 	yInicial, ticks);
	}
	if ((valorNumerico > 2)&&(valorNumerico < 7)) {
		pajaro = new PajaroRojo(anguloInicial, normaVelocidadInicial, POSICION_X,
		yInicial, ticks);
	}
	if ((valorNumerico > 6)&&(valorNumerico < 10)) {
		pajaro = new PajaroVerde(anguloInicial, normaVelocidadInicial, POSICION_X,
		yInicial, ticks);
	}
	 // pajaro = new PajaroRojo(3.92699,90, POSICION_X,
	 // yMaximo, ticks);
	 return pajaro;
}

double LineaEntradaPajarosVerticalDerecha::anguloInicialPajaro(double seed, double anguloAleatorio) {
	unsigned int numeroDivisorEntero = 100000;
	unsigned int numeroAleatorioEntero;
	unsigned int resto;
	double numeroAleatorioDecimal;
	double numeroDivisorDecimal = (double)numeroDivisorEntero;
	unsigned int numeroAleatorioDecimalPorDiez;
	srand(seed); 
	numeroAleatorioEntero = rand() % numeroDivisorEntero;
	numeroAleatorioDecimal = numeroAleatorioEntero / numeroDivisorDecimal;
	numeroAleatorioDecimalPorDiez = floor(numeroAleatorioDecimal * 10);
	resto = numeroAleatorioDecimalPorDiez % 2;
	if (resto == 1) {
		// corresponde Vy > 0 positivo segundo cuadrante
		anguloAleatorio = M_PI - anguloAleatorio;
	}
	if(resto == 0) {
		// corresponde Vy < 0 tercer cuadrante
		anguloAleatorio = 3 * M_PI_2 - anguloAleatorio;
	}
	return anguloAleatorio;
}



LineaEntradaPajarosVerticalDerecha::~LineaEntradaPajarosVerticalDerecha() {}

